いちナレッジサイトにおける MkDocs および Material for MkDocs の 設定まとめ【静的サイトジェネレータ】

いちナレッジサイトにおける MkDocs および Material for MkDocs の 設定まとめ【静的サイトジェネレータ】

Clock Icon2024.10.10

社内のエンジニアチームにてナレッジサイト(Classmethod Cloud Guidebook[1])を運営しています。

sc_2024-10-10_08-22-49_17830
ナレッジサイト(Classmethod Cloud Guidebook)

本ナレッジサイトでは静的サイトジェネレータとして MkDocs (およびその拡張の Material for MkDocs) を活用しています。 これらはシンプルな管理でありながら、豊富な表現や拡張を実装できる 非常に強力なツールです。

今回は一例として、 このナレッジサイトにおけるMkDocs設定項目 を紹介していこうと思います。 本ブログは「これからMkDocs(+ Material for MkDocs)を使ってサイトを構成していく方々の参考情報となること」 および「社内のエンジニアチームへの情報共有」を目的として書いています。

前提知識

MkDocs について

MkDocs は静的サイトジェネレーターです。

sc_2024-10-10_08-41-51_7440
新規プロジェクト作成時のMkDocsサイト

ドキュメントのソースを Markdownで記述します。 ページ構成やテーマなどの設定は YAMLファイルで指定します。

シンプルな管理でありながら幅広いカスタマイズが可能な点が強みです。 GitHub Pages や S3バケットへデプロイして、 公開することもできます。

MkDocs の始め方については以下 Getting Started を参照ください。

https://www.mkdocs.org/getting-started/

Material for MkDocs について

Material for MkDocs (material) は MkDocs の強力な拡張機能です。 material テーマを適用するだけでモダンな見た目のサイト構成を適用できます。

sc_2024-10-10_08-43-12_5340
materialテーマを適用したMkDocsサイト

ビルドインの拡張機能も多いです。 サイト構成や執筆における表現の幅を容易に広げられます。

Material for MkDocs の公式ドキュメントおよび Getting Started は以下を参照ください。

https://squidfunk.github.io/mkdocs-material/getting-started/

mkdocs.yml について

サイトの設定は mkdocs.yml と呼ばれる YAMLファイルにて集中管理されます。 以下 シンプルな mkdocs.yml 例です。

mkdocs.yml
site_name: MkLorum
nav:
  - Home: index.md
  - About: about.md

sc_2024-10-10_10-35-12_12683
引用: Getting Started - MkDocs

設定方法の公式情報は Configuration - MkDocs を参照ください。 以下にmkdocs.ymlにおける主要なセクションをピックアップします。

セクション 説明
nav ドキュメントのレイアウトを定義します
theme サイトの見た目などに関わるテーマを定義します
markdown_extensions Markdown拡張機能を定義します
plugins サイト構築時に使用するプラグインを定義します

これ以降の紹介は mkdocs.yml における設定項目ベースで進めていきます。

基本設定

トップレベルの主要な設定について紹介します。

サイト名

site_name でサイト名を指定します。mkdocs.ymlの必須項目です。

また site_url でサイトの正規URL(canonical URL)を指定できます。 これはSEO(検索エンジン最適化)として使えます。

mkdocs.yml(抜粋)
site_name: Example Guidebook
site_url: https://guidebook.example.com/

sc_2024-10-08_09-53-53_14361

リポジトリ指定

repo_url を指定するとリポジトリへのリンクが表示されます。 共同編集、共同利用しているようなドキュメントサイトにて役に立ちます。

細かい調整として、 repo_name で表示名を編集できます。 また、edit_uri で編集リンクをカスタマイズできます。

mkdocs.yml(抜粋)
repo_url: https://github.com/YOUR-USERNAME/YOUR-REPOSITORY
repo_name: HOGE
edit_uri: edit/develop/docs/

sc_2024-10-10_10-59-34_5216

ナビゲーション設定(nav)

navセクションではドキュメントのレイアウトを指定します。 以下 設定例です。

mkdocs.yml(抜粋)
nav:
  - Home: index.md
  - User Guide:
    - Writing your docs: writing-your-docs.md
    - Styling your docs: styling-your-docs.md
  - About:
    - License: license.md
    - Release Notes: release-notes.md

-– 引用: Configure Pages and Navigation - MkDocs

sc_2024-10-10_11-15-48_28791
※画像は後述するmaterialテーマを適用しています

なおページタイトルの指定方法はいくつか手段があります。 先程の例のように navセクションに記載するほかに、 Markdownのレベル1見出しに記載することでも指定可能です。

ページタイトルの挙動についての詳細は以下ドキュメントを参照ください。

テーマ設定(theme)

テーマ設定(theme)について紹介していきます。 サイトの見た目に関わる部分です。

Material for MkDocs テーマ

material テーマを適用します。

mkdocs.yml(抜粋)
theme:
  name: material

sc_2024-10-08_13-48-19_22304

ロゴ

サイトの左上部に表示されるロゴ(Logo)を指定します。

mkdocs.yml(抜粋)
theme:
  logo: image/logo.png

sc_2024-10-08_13-55-55_26162

ファビコン

ブラウザのタブなどに表示されるファビコン(Favicon)を指定します。

mkdocs.yml(抜粋)
theme:
  favicon: image/favicon.ico

sc_2024-10-08_13-58-06_4632

言語設定

言語(language)を日本語(ja) に変更します。 UIのローカライズなどが適用されます。

mkdocs.yml(抜粋)
theme:
  lang: ja

sc_2024-10-08_14-04-57_14293

テーマカラーとライトモード/ダークモード

palette にてテーマカラーを設定できます。 以下シンプルな設定例です。

mkdocs.yml(抜粋)
theme:
  palette:
    primary: brown

sc_2024-10-08_16-50-46_20911

また以下のようにライトモード/ダークモードを選択できる設定も可能です。

mkdocs.yml(抜粋)
theme:
  palette:

    # Palette toggle for light mode
    - media: "(prefers-color-scheme: light)"
      primary: blue
      scheme: default
      toggle:
        icon: material/brightness-7
        name: Switch to dark mode

    # Palette toggle for dark mode
    - media: "(prefers-color-scheme: dark)"
      primary: blue grey
      scheme: slate
      toggle:
        icon: material/brightness-4
        name: Switch to light mode

sc_2024-10-08_16-59-02_17535

サイドバーナビゲーション

サイドバーのナビゲーション(navigation)の表示や挙動を調整できます。

自環境ではトップレベルのセクションをグループ化表示する設定(navigation.sections)を入れています。

mkdocs.yml(抜粋)
theme:
  features:
    - navigation.sections

sc_2024-10-08_17-15-23_14858

コードブロックのコピーボタン

コードブロックの右上にコピーボタン(Code copy button)を配置します。

mkdocs.yml(抜粋)
theme:
  features:
    - content.code.copy

sc_2024-10-08_17-17-57_32673

カスタム拡張テーマ

自身でテーマの拡張(Extending the theme)が可能です。

mkdocs.yml(抜粋)
theme:
  # overrides ディレクトリに拡張(上書き)したいアセットを配置します。
  custom_dir: overrides

一例として、以下ブログでは custom_dir を活用してヘッダーをカスタマイズしています。

https://dev.classmethod.jp/articles/material-for-mkdocs-title-text-link-url/

Markdown拡張設定(markdown_extensions)

Markdown執筆の表現の幅を広げるために、 いくつか設定を入れています。

目次(Table of Contenrs)チューニング

表示する目次(toc)の深さを調整しています。

mkdocs.yml(抜粋)
markdown_extensions:
  - toc:
      toc_depth: 2-3

sc_2024-10-08_17-45-00_28884

コールアウト

強調されたテキストブロック(admonitions)を作成できます。

mkdocs.yml(抜粋)
markdown_extensions:
  - admonition
  - pymdownx.details
Markdown記載例
!!! note

    For full documentation visit [mkdocs.org](https://www.mkdocs.org).

sc_2024-10-09_00-34-01_2407

pymdownx.details 設定は 折りたたみ ( details ) のコールアウトを作成する際に必要な設定です。 !!! の代わりに ??? を使います。

Markdown記載例
??? note

    For full documentation visit [mkdocs.org](https://www.mkdocs.org).

sc_2024-10-09_00-37-12_3730

脚注

脚注(footnotes)を設定できるようにします。

mkdocs.yml(抜粋)
markdown_extensions:
  - footnotes
Markdown記載例
くらにゃん[^1]に聞いてみました。

[^1]: クラスメソッドのマスコットキャラクター

sc_2024-10-09_01-13-43_10223

シンタックスハイライトとMermaid表示

SuperFences 拡張はさまざまな機能を持ちます。 例えばコードブロックを要素(引用やコールアウトなど)の中に入れ子に挿入したり、 Mermaid を描画したりできます。コードのハイライトも適用されます。

mkdocs.yml(抜粋)
markdown_extensions:
  - pymdownx.superfences:
      custom_fences:
        - name: mermaid
          class: mermaid
          format: !!python/name:pymdownx.superfences.fence_code_format
Markdown記載例
!!! note
    ```python
    import foo.bar
    ```

```mermaid
flowchart LR
    Start --> Stop
```

sc_2024-10-10_11-44-24_30821

HTML属性の追加

attr_list 拡張によって、 HTML属性やCSSクラスを追加するための構文が 使えるようになります。

mkdocs.yml(抜粋)
markdown_extensions:
  - attr_list
Markdown記載例
![img](./image/cm-logo.png){width="50%"}

![img](./image/cm-logo.png){width="20%"}

sc_2024-10-09_09-36-59_32122

アイコン・絵文字

アイコンや絵文字(Icons, Emojis)を挿入できます。

mkdocs.yml(抜粋)
markdown_extensions:
  - attr_list
  - pymdownx.emoji:
      emoji_index: !!python/name:material.extensions.emoji.twemoji
      emoji_generator: !!python/name:material.extensions.emoji.to_svg
Markdown記載例
:motorcycle: :dash:

sc_2024-10-09_10-06-00_3179

Card grids

Markdown in HTML 拡張の1機能として、 カード型のレイアウトを構成できます。

mkdocs.yml(抜粋)
markdown_extensions:
  - md_in_html
Markdown記載例
<div class="grid cards" markdown>

- :fontawesome-brands-html5: __HTML__ for content and structure
- :fontawesome-brands-js: __JavaScript__ for interactivity
- :fontawesome-brands-css3: __CSS__ for text running out of boxes
- :fontawesome-brands-internet-explorer: __Internet Explorer__ ... huh?

</div>

-- 引用: Grids - Material for MkDocs

sc_2024-10-09_10-12-38_20169

プラグイン設定(plugins)

plugin セクションでは、 さまざまな機能拡張プラグインを設定します。

また、Material for MkDocs では ビルドインプラグインが豊富にあります。 詳細は以下を参照ください。

https://squidfunk.github.io/mkdocs-material/plugins/

タグ

各ページにタグ(tags)を設定します。 タグ索引の作成などで役に立ちます。

mkdocs.yml(抜粋)
plugins:
  - tags
Markdown記載例
---
tags:
  - AAA
  - BBB
  - CCC
---

# Welcome to MkDocs

sc_2024-10-09_10-23-15_11866

検索機能

search プラグインを有効化して、ドキュメントを検索できるようにします。

mkdocs.yml(抜粋)
plugins:
  - search:
      lang: ja

sc_2024-10-09_17-23-20_20086

作成日と更新日の表示

Markdownページの作成日と更新日を表示する git-revision-date-localized プラグインを導入しています。 追加で pip install mkdocs-git-revision-date-localized-plugin が必要です。

mkdocs.yml(抜粋)
plugins:
  - git-revision-date-localized:
      # MKDOCS_CI 環境変数が true にセットされていた場合にプラグインが有効
      enabled: !ENV [MKDOCS_CI, false]
      enable_creation_date: true

sc_2024-10-09_17-28-46_26487

印刷用ページ

印刷用ページを用意してくれる print-site プラグインを導入しています。 追加で pip3 install mkdocs-print-site-plugin が必要です。

mkdocs.yml(抜粋)
plugins:
  - print-site:
      enumerate_headings: false

デフォルトでは /print_page/ もしくは print_page.html へアクセスすると 印刷用ページが表示されます。

そのほか設定

そのほか、細かい設定を紹介します。

ソート可能なテーブル

javascriptの拡張でソート可能なテーブル(Sortable tables)を設定できます。

mkdocs.yml(抜粋)
markdown_extensions:
  - tables
extra_javascript:
  - https://unpkg.com/tablesort@5.3.0/dist/tablesort.min.js
  - javascripts/tablesort.js
docs/javascripts/tablesort.js
document$.subscribe(function() {
  var tables = document.querySelectorAll("article table:not([class])")
  tables.forEach(function(table) {
    new Tablesort(table)
  })
})

sc_2024-10-09_17-44-10_27417

コピーライト

フッターにコピーライト(copyright)を表示できます。

mkdocs.yml(抜粋)
copyright: "© Classmethod, Inc."

sc_2024-10-09_17-50-59_3089

カスタムCSS

カスタムCSS(extra_css)を指定して、細かい調整が可能です。

mkdocs.yml(抜粋)
extra_css:
  - stylesheets/extra.css
docs/stylesheets/extra.css
/* 例: H1見出しのデザインを変更 */
.md-typeset h1 {
  font-weight: bold;
  border-bottom: solid 5px #1AB394;
  padding-bottom: 5px;
}

sc_2024-10-09_17-56-28_8579

Google Analytics

Material for MkDocs はネイティブで Google Analytics と統合 されています。

mkdocs.yml(抜粋)
extra:
  analytics:
    provider: google
    property: G-XXXXXXXXXX

ソーシャルリンク

ソーシャルリンク(social links)をフッターに記載できます。

mkdocs.yml(抜粋)
extra:
  social:
    - icon: fontawesome/solid/paper-plane
      link: https://example.com/feedback
      name: お問い合わせフォーム

sc_2024-10-09_18-03-58_4191

おわりに

MkDocs および Material for MkDocs の 設定例でした。 さいごに、これまでの設定をまとめた mkdocs.yml を以下に記載します。

これまでの設定をまとめたmkdocs.yml
mkdocs.yml
site_name: Example Guidebook
site_url: https://guidebook.example.com/
repo_url: https://github.com/YOUR-USERNAME/YOUR-REPOSITORY
repo_name: HOGE
edit_uri: edit/develop/docs/

nav:
  - Home: index.md
  - User Guide:
    - Writing your docs: writing-your-docs.md
    - Styling your docs: styling-your-docs.md
  - About:
    - License: license.md
    - Release Notes: release-notes.md

theme:
  name: material
  logo: image/logo.png
  favicon: image/favicon.ico
  language: ja
  palette:

    # Palette toggle for light mode
    - media: "(prefers-color-scheme: light)"
      primary: blue
      scheme: default
      toggle:
        icon: material/brightness-7
        name: Switch to dark mode

    # Palette toggle for dark mode
    - media: "(prefers-color-scheme: dark)"
      primary: blue grey
      scheme: slate
      toggle:
        icon: material/brightness-4
        name: Switch to light mode
  features:
    - navigation.sections
    - content.code.copy
  # custom_dir: overrides

markdown_extensions:
  - toc:
      toc_depth: 2-3
  - admonition
  - pymdownx.details
  - footnotes
  - pymdownx.superfences:
      custom_fences:
        - name: mermaid
          class: mermaid
          format: !!python/name:pymdownx.superfences.fence_code_format
  - attr_list
  - pymdownx.emoji:
      emoji_index: !!python/name:material.extensions.emoji.twemoji
      emoji_generator: !!python/name:material.extensions.emoji.to_svg
  - md_in_html

plugins:
  - tags
  - search:
      lang: ja
  # # 要: pip3 install mkdocs-git-revision-date-localized-plugin
  # - git-revision-date-localized:
  #     enabled: !ENV [MKDOCS_CI, false]
  #     enable_creation_date: true
  # # 要: pip3 install install mkdocs-print-site-plugin
  # - print-site:
  #     enumerate_headings: false

extra_javascript:
  - https://unpkg.com/tablesort@5.3.0/dist/tablesort.min.js
  - javascripts/tablesort.js

extra_css:
  - stylesheets/extra.css

extra:
  social:
    - icon: fontawesome/solid/paper-plane
      link: https://example.com/feedback
      name: お問い合わせフォーム

copyright: "example.com"

また、MkDocs には 他にもさまざまな関連プロジェクト、プラグインがあります。 それらは以下カタログにまとめられています。 役立つものが無いか探してみると良いかもしれません。

https://github.com/mkdocs/catalog

以上、参考になれば幸いです。

参考

https://www.mkdocs.org/

https://squidfunk.github.io/mkdocs-material/

https://dev.classmethod.jp/articles/mkdocs-and-material-for-mkdocs-tips-matome/#etc-topics

https://dev.classmethod.jp/articles/how-to-use-ccg/

脚注
  1. Classmethod Cloud Guidebook(CCG)は クラスメソッドメンバーズ(請求代行サービス)向けに公開している ナレッジサイトです。お客様のクラウド推進を支援すべく、AWSのセキュリティや統制、ガイドライン周りで役立つナレッジを公開しています。詳細は こちらのブログ を参照ください。 ↩︎

Share this article

facebook logohatena logotwitter logo

© Classmethod, Inc. All rights reserved.